﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Chilis.Marketing.Common;
using Chilis.Marketing.Business.Logic;
using Chilis.Marketing.Business.Entity;
using System.Data;
using System.Web.Services;
using System.Text;

public partial class Gral_DetTrabajador : System.Web.UI.Page
{
    #region ATRIBUTOS

    private BLTrabajador trabajadorBL;
    private BLActividad actividadBL;
    public static int cantidadRegDestinos;
    public static int cantidadRegMaximo;

    #endregion

    #region PROPIEDADES
    #endregion

    #region METODOS

    private void ActivarControles(bool activo)
    {
        this.txtCodigoRol.Enabled = false;
        this.txtDescripcionRol.Enabled = false;
        this.txtCantidadRol.Enabled = false;
        this.txtCostoRol.Enabled = false;
    }

    private void CargarDatos(int idRolActividad)
    {
        this.actividadBL = new BLActividad();
        BEActividad actividadBE = this.actividadBL.obtenerActividadPorRecursoRolId(idRolActividad);
        if (actividadBE != null)
        {
            if (actividadBE.LRecurso != null && actividadBE.LRecurso.Count > 0)
            {
                BERecursoRol recursoRolBE = (BERecursoRol)actividadBE.LRecurso[0];
                this.txtCodigoRol.Text = recursoRolBE.IdRecurso.ToString().PadLeft(5, '0');
                this.txtDescripcionRol.Text = recursoRolBE.Descripcion.ToString();
                this.txtCantidadRol.Text = recursoRolBE.Cantidad.ToString();
                cantidadRegMaximo = recursoRolBE.Cantidad;
                this.txtCostoRol.Text = String.Format("{0:N}", recursoRolBE.Costo);
            }
        }
    }

    public BETrabajador ObtenerTrabjadorBE_WebForm()
    {
        BETrabajador trabajadorBE = new BETrabajador();
        trabajadorBE.Nombres = this.txtNombre.Text.Replace("'", "''");
        trabajadorBE.ApellidoPaterno = this.txtApellidoPaterno.Text.Replace("'", "''");
        trabajadorBE.ApellidoMaterno = this.txtApellidoMaterno.Text.Replace("'", "''");

        int idRolActividad = (Request.QueryString["id"] != null ? int.Parse(Request.QueryString["id"].ToString()) : Constantes.idValorNulo);
        trabajadorBE.IdRecursoEvaluado = idRolActividad;

        trabajadorBE.Estado = Constantes.ESTADO.ACTIVO;
        trabajadorBE.Order_by = (char)Constantes.ORDENAR_POR.CODIGO;
        trabajadorBE.De_forma = (char)Constantes.DE_FORMA.ASCENDENTE;

        return trabajadorBE;
    }

    public void CargarGrillaListadoTrabOri(bool deBuscar)
    {
        if (deBuscar == true)
        {
            this.gvTrabajadoresOri.PageIndex = 0;
        }

        BETrabajador trabajadorBE = this.ObtenerTrabjadorBE_WebForm();
        this.trabajadorBL = new BLTrabajador();
        DataTable dt = this.trabajadorBL.buscarTrabajadores(trabajadorBE);
        this.gvTrabajadoresOri.DataSource = dt;
        this.gvTrabajadoresOri.DataBind();
    }

    public void CargarGrillaListadoTrabDest(bool deBuscar)
    {
        if (deBuscar == true)
        {
            this.gvTrabajadoresDest.PageIndex = 0;
        }

        int idRolActividad = (Request.QueryString["id"] != null ? int.Parse(Request.QueryString["id"].ToString()) : Constantes.idValorNulo);
        BLRecursoRol recursoRolBL = new BLRecursoRol();
        DataTable dt = recursoRolBL.obtenerTrabajadoresPorIdRolActividad(idRolActividad);
        cantidadRegDestinos = dt.Rows.Count;
        this.gvTrabajadoresDest.DataSource = dt;
        this.gvTrabajadoresDest.DataBind();
    }

    private void LimpiarFormulario()
    {
        try
        {
            this.txtNombre.Text = string.Empty;
            this.txtApellidoPaterno.Text = string.Empty;
            this.txtApellidoMaterno.Text = string.Empty;
        }
        catch (Exception)
        {
        }
    }

    [WebMethod]
    public static int agregaRecursoTrabajador(string idRecursoRol, string idTrabajador)
    {
        Constantes.RECURSO_TRABAJADOR_RESULTADO_AGREGAR resultadoAgregar = Constantes.RECURSO_TRABAJADOR_RESULTADO_AGREGAR.NINGUNO;

        BLRecursoRol recursoRolBL = new BLRecursoRol();
        BERecursoRol recursoRolBE = new BERecursoRol();

        int tempIdRecursoRol = Constantes.idValorNulo;
        int.TryParse(idRecursoRol, out tempIdRecursoRol);
        recursoRolBE.IdRecurso = tempIdRecursoRol;

        int tempIdTrabajador = Constantes.idValorNulo;
        int.TryParse(idTrabajador, out tempIdTrabajador);
        BETrabajadorRol trabajadorRolBE = new BETrabajadorRol();
        trabajadorRolBE.Trabajador = new BETrabajador();
        trabajadorRolBE.Trabajador.IdTrabajador = tempIdTrabajador;

        trabajadorRolBE.Estado = Constantes.ESTADO.ACTIVO;
        trabajadorRolBE.Order_by = (char)Constantes.ORDENAR_POR.CODIGO;
        trabajadorRolBE.De_forma = (char)Constantes.DE_FORMA.ASCENDENTE;

        recursoRolBE.LTrabajador = new List<BETrabajadorRol>();
        recursoRolBE.LTrabajador.Add(trabajadorRolBE);

        int tempCantidadRegDestinos = cantidadRegDestinos + 1;
        if (tempCantidadRegDestinos > cantidadRegMaximo)
	    {
            resultadoAgregar = Constantes.RECURSO_TRABAJADOR_RESULTADO_AGREGAR.NO_PERMITIDO;
	    }
        else
        {
            if (recursoRolBL.insertarTrabajadorParaRecursoRol(recursoRolBE))
            {
                resultadoAgregar = Constantes.RECURSO_TRABAJADOR_RESULTADO_AGREGAR.EXITOSO;
            }
        }

        return (int)resultadoAgregar;
    }

    [WebMethod]
    public static bool modificaRecursoTrabajador(string idTrabajadorRol, string sueldo)
    {
        BLRecursoRol recursoRolBL = new BLRecursoRol();
        BERecursoRol recursoRolBE = new BERecursoRol();

        int tempIdTrabajadorRol = Constantes.idValorNulo;
        int.TryParse(idTrabajadorRol, out tempIdTrabajadorRol);

        double tempSueldo = Constantes.idValorNulo;
        double.TryParse(sueldo, out tempSueldo);

        BETrabajadorRol trabajadorRolBE = new BETrabajadorRol();
        trabajadorRolBE.IdTrabajadorRol= tempIdTrabajadorRol;
        trabajadorRolBE.Sueldo = tempSueldo;

        trabajadorRolBE.Estado = Constantes.ESTADO.ACTIVO;
        trabajadorRolBE.Order_by = (char)Constantes.ORDENAR_POR.CODIGO;
        trabajadorRolBE.De_forma = (char)Constantes.DE_FORMA.ASCENDENTE;

        recursoRolBE.LTrabajador = new List<BETrabajadorRol>();
        recursoRolBE.LTrabajador.Add(trabajadorRolBE);

        return recursoRolBL.modificarSueldoTrabajadorParaRecursoRol(recursoRolBE);
    }

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            ControlHelper.RegisterClientScriptFile(this, "jquery.js", true);
            ControlHelper.RegisterClientScriptFile(this, "json2.js", true);
            ControlHelper.RegisterClientScriptFile(this, "thickbox.js", true);
            ControlHelper.RegisterClientScriptFile(this, "recursotrab.js", true);

            if (!Page.IsPostBack)
            {
                Constantes.ACCION accion = Constantes.ACCION.NINGUNO;
                if (Request.QueryString["acc"] != null)
                {
                    accion = Constantes.ObtenerEnumAccion(Request.QueryString["acc"]);
                }

                switch (accion)
                {
                    case Constantes.ACCION.NINGUNO:
                        break;
                    case Constantes.ACCION.VER:
                        break;
                    case Constantes.ACCION.NUEVO:
                        break;
                    case Constantes.ACCION.MODIFICAR:
                        
                        break;
                    case Constantes.ACCION.ELIMINAR:
                        break;
                    case Constantes.ACCION.ASOCIAR:
                        if (Request.QueryString["id"] != null)
                        {
                            int idRolActividad = int.Parse(Request.QueryString["id"].ToString());
                            this.CargarDatos(idRolActividad);
                            this.CargarGrillaListadoTrabOri(false);
                            this.CargarGrillaListadoTrabDest(false);
                            this.ActivarControles(true);
                        }
                        break;
                    case Constantes.ACCION.APROBAR:
                        break;
                    case Constantes.ACCION.GENERAR_REPORTE:
                        break;
                    default:
                        break;
                }
                
                //this.CargarGrillaListadoTrabDest(false);
                
            }
        }
        catch (Exception ex)
        {
            Response.Redirect("~/Error.aspx?titError=" + Mensajes.msjeError_CargaRegistros + "&descError=" + ex.Message, false);
        }
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        try
        {
            this.CargarGrillaListadoTrabOri(true);
        }
        catch (Exception ex)
        {
            Response.Redirect("~/Error.aspx?titError=" + Mensajes.msjeError_CargaRegistros + "&descError=" + ex.Message, false);
        }
    }
    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        this.LimpiarFormulario();
    }


    protected void gvTrabajadoresOri_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.gvTrabajadoresOri.PageIndex = e.NewPageIndex;
        this.CargarGrillaListadoTrabOri(false);
    }
    protected void gvTrabajadoresOri_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Control btnAgregarTrab = e.Row.FindControl("btnAgregarItem");
            if (btnAgregarTrab != null)
            {
                StringBuilder click = new StringBuilder();
                string idTrabajador = ((Label)e.Row.FindControl("lblCodigo")).Text;
                int idRecursoRol = int.Parse(this.txtCodigoRol.Text);

                //agregaTrabajador
                click.AppendLine(String.Format("agregaTrabajador('{0}','{1}')", idRecursoRol.ToString(), idTrabajador.ToString()));
                e.Row.Attributes.Add("onclick", click.ToString());
            }
        }
    }
    protected void upTrabajadoresDest_Load(object sender, EventArgs e)
    {
        string arg = Request.Form["__EVENTARGUMENT"];
        if (string.IsNullOrEmpty(arg)) return;

        if (arg.StartsWith("RefreshDest"))
        {
            /*
            int tempIdCampanha = Constantes.idValorNulo;
            int.TryParse(Request.QueryString["id"].ToString(), out tempIdCampanha);
            this.campanhaBL = new BLCampanha();
            DataTable dtActividades = this.campanhaBL.obtenerActividadesPorIdCampanha(tempIdCampanha);
            int numPag = (dtActividades.Rows.Count / 10) + 1;

            //parse data first then do your thing here...
            this.gvActividades.PageIndex = numPag;
            this.gvActividades.DataSource = dtActividades;
            this.gvActividades.DataBind();
             */
            int idRolActividad = int.Parse(Request.QueryString["id"].ToString());
            this.CargarDatos(idRolActividad);

            this.CargarGrillaListadoTrabOri(false);
            this.CargarGrillaListadoTrabDest(false);
        }
    }

    //protected void upTrabajadoresOri_Load(object sender, EventArgs e)
    //{
    //    string arg = Request.Form["__EVENTARGUMENT"];
    //    if (string.IsNullOrEmpty(arg)) return;

    //    if (arg.StartsWith("RefreshOri"))
    //    {
    //        /*
    //        int tempIdCampanha = Constantes.idValorNulo;
    //        int.TryParse(Request.QueryString["id"].ToString(), out tempIdCampanha);
    //        this.campanhaBL = new BLCampanha();
    //        DataTable dtActividades = this.campanhaBL.obtenerActividadesPorIdCampanha(tempIdCampanha);
    //        int numPag = (dtActividades.Rows.Count / 10) + 1;

    //        //parse data first then do your thing here...
    //        this.gvActividades.PageIndex = numPag;
    //        this.gvActividades.DataSource = dtActividades;
    //        this.gvActividades.DataBind();
    //         */
    //        this.CargarGrillaListadoTrabOri(false);
    //    }
    //}

    protected void gvTrabajadoresDest_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.gvTrabajadoresDest.PageIndex = e.NewPageIndex;
        this.CargarGrillaListadoTrabDest(false);
    }
    protected void gvTrabajadoresDest_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridViewRow fila = e.Row;
            this.ConfigurarModificarTrabajadorPorRol(fila);
            this.ConfigurarEliminarTrabajadorPorRol(fila);
        }
    }

    protected void gvTrabajadoresDest_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        Constantes.ACCION accion = Constantes.ACCION.NINGUNO;
        accion = Constantes.ObtenerEnumAccion(e.CommandName);

        if (accion == Constantes.ACCION.NINGUNO)
        {
            return;
        }

        GridViewRow fila = ((GridViewRow)((Control)e.CommandSource).NamingContainer);
        string idTrabajadorRol = ((Label)fila.FindControl("lblCodigo")).Text;


        switch (accion)
        {
            case Constantes.ACCION.NINGUNO:
                break;
            case Constantes.ACCION.VER:
                break;
            case Constantes.ACCION.NUEVO:
                break;
            case Constantes.ACCION.MODIFICAR:
                break;
            case Constantes.ACCION.ELIMINAR:
                this.ProcesarEliminarTrabajador(idTrabajadorRol);
                break;
            case Constantes.ACCION.ASOCIAR:
                break;
            case Constantes.ACCION.APROBAR:
                break;
            case Constantes.ACCION.GENERAR_REPORTE:
                break;
            case Constantes.ACCION.ANULAR:
                break;
            default:
                break;
        }
    }

    private void ProcesarEliminarTrabajador(string idTrabajadorRol)
    {
        BERecursoRol recursoRolBE = new BERecursoRol();
        BETrabajadorRol trabajadorRolBE = new BETrabajadorRol();
        trabajadorRolBE.IdTrabajadorRol = int.Parse(idTrabajadorRol);
        trabajadorRolBE.Estado = Constantes.ESTADO.INACTIVO;
        recursoRolBE.LTrabajador = new List<BETrabajadorRol>();
        recursoRolBE.LTrabajador.Add(trabajadorRolBE);

        BLRecursoRol recursoRolBL = new BLRecursoRol();
        recursoRolBL.eliminarTrabajadorParaRecursoRol(recursoRolBE);

        int idRolActividad = int.Parse(Request.QueryString["id"].ToString());
        this.CargarDatos(idRolActividad);

        this.CargarGrillaListadoTrabOri(true);
        this.CargarGrillaListadoTrabDest(true);
    }

    private void ConfigurarEliminarTrabajadorPorRol(GridViewRow fila)
    {
        Label lblTempCodigo = (Label)fila.FindControl("lblCodigo");
        string nombres = ((Label)fila.FindControl("lblNombres")).Text;
        string apellidoPaterno = ((Label)fila.FindControl("lblApellidoPaterno")).Text;
        string apellidoMaterno = ((Label)fila.FindControl("lblApellidoMaterno")).Text;
        string nombreCompleto = apellidoPaterno.ToUpper();
        nombreCompleto += (apellidoMaterno != string.Empty ? " " + apellidoMaterno.ToUpper() : string.Empty);
        nombreCompleto += (nombres != string.Empty ? ", " + nombres : string.Empty);


        ImageButton imgTempBtnEliminar = (ImageButton)fila.FindControl("btnEliminarItem");
        StringBuilder click = new StringBuilder();
        click.AppendLine(String.Format("return EliminarTrabajadorPorRol('{0}')", nombreCompleto));
        imgTempBtnEliminar.Attributes.Add("onclick", click.ToString());
    }

    private void ConfigurarModificarTrabajadorPorRol(GridViewRow fila)
    {
        Label lblTempCodigo = (Label)fila.FindControl("lblCodigo");
        TextBox tempTextBoxSueldo = (TextBox)fila.FindControl("txtSueldo");

        int tempCodigo = Constantes.idValorNulo;
        int.TryParse(lblTempCodigo.Text, out tempCodigo);

        StringBuilder blur = new StringBuilder();
        blur.AppendLine(String.Format("return ModificarTrabajadorPorRol('{0}','{1}')", tempTextBoxSueldo.ClientID, tempCodigo.ToString()));
        tempTextBoxSueldo.Attributes.Add("onblur", blur.ToString());
    }


    protected void btnAceptar_Click(object sender, EventArgs e)
    {

    }

    #endregion

    
}